Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Mar 12, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/11439

🧭 풀이 시간

10분

👀 체감 난이도

✏️ 문제 설명

이항 계수 $comb(n, k)$$m$으로 나눈 나머지를 구해보자.

🔍 풀이 방법

[사용한 알고리즘]

  • 에라토스테네스의 체
  • 분할 정복을 이용한 거듭제곱

$comb(n, k)$를 소인수분해 해보자.
$comb(n, k) = \dfrac{n!}{k! (n-k)!}$ 이다.
만약, 어떤 수 $x$에 대해, $x!$을 소인수분해한 결과를 구할 수 있다면? 저것도 구할 수 있다.

$x!$ 소인수분해 하기

정확히는, 소인수분해라기 보다는, 정수 배열 cnt를 정의해서 cnt[i] = 소인수 i가 x!에서 곱해진 횟수를 구할 것이다.
이 때, 소수 i에 대해 $cnt[i] = \dfrac{x}{i} + \dfrac{x}{i\times i} + \dfrac{x}{i \times i \times i} + \cdots $이다. (분수 계산에서 나머지는 버린다.)


이제, n!을 소인수분해한 결과를 cnt에 더해주고, k!과 (n-k)!을 소인수분해한 결과를 각각 cnt에서 빼주면 최종 소인수분해 결과가 나오게 된다.
이 배열을 순회하며 분할 정복을 이용한 거듭제곱으로 빠르게 결과값을 구해주면 된다.

⏳ 회고

어제 풀었던 문제랑 같은 테크닉을 쓴다. (조합의 소인수분해 결과 구하기)
https://www.acmicpc.net/problem/1095

@ShinHeeEul ShinHeeEul merged commit aa8330b into main Mar 12, 2025
1 check passed
@oncsr oncsr added the success 👍 해설을 보지 않고 풀었을 때 label Mar 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants